iT邦幫忙

0

[leetcode - Bliend-75 ] 19. Remove Nth Node From End of List (Medium)

  • 分享至 

  • xImage
  •  

Given the head of a linked list, remove the nth node from the end of the list and return its head.

給一個 linked list 並移除倒數第 n 個 node。

Example

Input: 1 -> 2 -> 3 -> 4 -> 5, n = 2;
Output: 1 -> 2 -> 3 -> 5

Step

  1. 利用快慢雙指針,建立一個 node 連在 head 前面並讓慢指針指向 node
    https://ithelp.ithome.com.tw/upload/images/20231226/20124767099QuTyiDX.jpg
    https://ithelp.ithome.com.tw/upload/images/20231226/20124767RP29Y2FHoa.jpg

  2. 設定慢指針與快指針
    https://ithelp.ithome.com.tw/upload/images/20231226/20124767twt57FEBeB.jpg

  3. 讓快指針先跑 n 個 node,再讓兩個指針一起跑,跑到快指針抵達 head 的最後一個 node,這樣就會使慢指針剛好停在要被移除的 node 的前一個 node。
    https://i.imgur.com/rjcf3FG.gif

  4. 將慢指針指到的 node 連接到下下個 node
    https://ithelp.ithome.com.tw/upload/images/20231226/20124767WVTWRbABmx.jpg

Coding

/**
 * @param {ListNode} head
 * @param {number} n
 * @return {ListNode}
 */
var removeNthFromEnd = function(head, n) {
    if(head == null) return head; 

    var node = new ListNode(0);
    node.next = head;

    let slow = node;
    let fast = head;
    while (n > 0) {
        fast = fast.next;
        n--;
    }

    while(fast){
        fast = fast.next;
        slow = slow.next;
    }

    if(slow.next === null){
        slow.next = null ;
    } else {
        slow.next = slow.next.next;
    }

    return node.next;
};

Time complexity: O(n)


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言